package com.github.wxpay.sdk;

import com.fbs.wowo.util.common.Constants;

import java.io.InputStream;

public abstract class WXPayConfig {

    /**
     * 获取 App ID
     *
     * @return App ID
     */
    abstract String getAppID();

    /**
     * 获取 Mch ID
     *
     * @return Mch ID
     */
    abstract String getMchID();

    /**
     * 获取 API 密钥
     *
     * @return API密钥
     */
    abstract String getKey();

    /**
     * 获取商户证书内容
     *
     * @return 商户证书内容
     */
    abstract InputStream getCertStream();

    /**
     * HTTP(S) 连接超时时间，单位毫秒
     *
     * @return
     */
    public int getHttpConnectTimeoutMs() {
        return 6 * 1000;
    }

    /**
     * HTTP(S) 读数据超时时间，单位毫秒
     *
     * @return
     */
    public int getHttpReadTimeoutMs() {
        return 8 * 1000;
    }

    /**
     * 获取WXPayDomain, 用于多域名容灾自动切换
     * @return
     */
    abstract IWXPayDomain getWXPayDomain();

    /**
     * 是否自动上报。
     * 若要关闭自动上报，子类中实现该函数返回 false 即可。
     *
     * @return
     */
    public boolean shouldAutoReport() {
        return true;
    }

    /**
     * 进行健康上报的线程的数量
     *
     * @return
     */
    public int getReportWorkerNum() {
        return 6;
    }

    /**
     * 健康上报缓存消息的最大数量。会有线程去独立上报
     * 粗略计算：加入一条消息200B，10000消息占用空间 2000 KB，约为2MB，可以接受
     *
     * @return
     */
    public int getReportQueueMaxSize() {
        return 10000;
    }

    /**
     * 批量上报，一次最多上报多个数据
     *
     * @return
     */
    public int getReportBatchSize() {
        return 10;
    }

    // 微信支付签名加密类型
    public static final SignType WX_PAY_SIGN_TYPE = SignType.MD5;
    // 签名字段
    public static final String FIELD_SIGN = "sign";
    public static final String FIELD_SIGN_TYPE = "sign_type";

    public enum SignType {
        MD5, HMACSHA256
    }

    // sandbox地址
    public static final String SANDBOX_UNIFIEDORDER_URL_SUFFIX  = "/sandboxnew/pay/unifiedorder";
    // 统一下单uri
    public static final String UNIFIEDORDER_URL_SUFFIX          = "/pay/unifiedorder";
    // 统一下单请求地址
    public static String WX_PAY_ORDER = "https://api.mch.weixin.qq.com" + UNIFIEDORDER_URL_SUFFIX;

    // 微信查询订单 url
    public static final String WX_QUERY_ORDER_URL   = "https://api.mch.weixin.qq.com/pay/orderquery";
    // 微信异步回调 url
    public static final String WX_NOTIFID_URL       = Constants.getURL() + "/pay/wxnotice";
    // 微信获取沙箱 key url
    public static final String WX_SANDBOX_SIGN_URL  = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey";
}
